package org.dicr.sys.linux;

import java.io.*;

/**
 * Информация о памяти.
 * <P>
 * Содержит информацию о памяти на момент времени <CODE>timeStamp</CODE>.
 * </P>
 * 
 * @author Igor A Tarasov &lt;java@dicr.org&gt;
 * @version 1.0
 * @see MemoryInfo
 * @see java.lang.System#currentTimeMillis
 */
public class MemoryInfoData implements Serializable {
	private static final long serialVersionUID = 1L;

	private long memTotal;

	private long memFree;

	private long swapTotal;

	private long swapFree;

	private long timeStamp = System.currentTimeMillis();

	/**
	 * Конструктор.
	 * 
	 * @param theMemTotal общий размер памяти (>= 0).
	 * @param theMemFree размер свободной памяти (0 <= memFree < memTotal).
	 * @param theSwapTotal общий размер свопа ( >= 0).
	 * @param theSwapFree размер свободного свопа (0 <= swapFree < swapTotal).
	 */
	protected MemoryInfoData(long theMemTotal, long theMemFree, long theSwapTotal, long theSwapFree) {
		if (theMemTotal < 0) { throw new IllegalArgumentException("memTotal: " + theMemTotal); }
		this.memTotal = theMemTotal;
		if (theMemFree < 0 || theMemFree > theMemTotal) { throw new IllegalArgumentException("memFree: " + theMemFree); }
		this.memFree = theMemFree;
		if (theSwapTotal < 0) { throw new IllegalArgumentException("swapTotal: " + theSwapTotal); }
		this.swapTotal = theSwapTotal;
		if (theSwapFree < 0 || theSwapFree > theSwapTotal) { throw new IllegalArgumentException("swapFree: "
		        + theSwapFree); }
	}

	/**
	 * Возвращает время данных.
	 * 
	 * @return временя данных в формате {@link java.lang.System#currentTimeMillis System.currentTimeMillis}.
	 */
	public long getTimeStamp() {
		return this.timeStamp;
	}

	/**
	 * Возвращает общий размер памяти.
	 * 
	 * @return размер памяти.
	 */
	public long getMemoryTotal() {
		return this.memTotal;
	}

	/**
	 * Возвращает размер свободной памяти.
	 * 
	 * @return размер свободной памяти.
	 */
	public long getMemoryFree() {
		return this.memFree;
	}

	/**
	 * Возвращает общий размер файла подкачки.
	 * 
	 * @return общий размер файла подкачки.
	 */
	public long getSwapTotal() {
		return this.swapTotal;
	}

	/**
	 * Возвращает размер свободного файла подкачки.
	 * 
	 * @return размер свободного файла подкачки.
	 */
	public long getSwapFree() {
		return this.swapFree;
	}

	/**
	 * Преобразование в строку.
	 * 
	 * @return строковое представление.
	 */
	@Override
	public String toString() {
		return "MemoryInfoData[" + this.timeStamp + "]";
	}
}
